package model

import (
	"database/sql/driver"
	"encoding/json"
	"time"

	"gorm.io/gorm"
)

// StringArray 字符串数组类型（用于 GORM）
type StringArray []string

// Value 实现 driver.Valuer 接口
func (a StringArray) Value() (driver.Value, error) {
	if len(a) == 0 {
		return nil, nil
	}
	return json.Marshal(a)
}

// Scan 实现 sql.Scanner 接口
func (a *StringArray) Scan(value interface{}) error {
	if value == nil {
		*a = []string{}
		return nil
	}
	bytes, ok := value.([]byte)
	if !ok {
		return nil
	}
	return json.Unmarshal(bytes, a)
}

// Route 路由模型
type Route struct {
	ID           uint       `gorm:"primaryKey" json:"id"`
	Name         string     `gorm:"size:100;not null" json:"name"`
	Path         string     `gorm:"size:255;not null;index" json:"path"`
	Target       string     `gorm:"size:500;not null" json:"target"`
	Methods      StringArray `gorm:"type:json" json:"methods"`
	AuthRequired bool       `gorm:"default:false" json:"auth_required"`
	RateLimitQPS int        `gorm:"default:0" json:"rate_limit_qps"`
	RateLimitBurst int     `gorm:"default:0" json:"rate_limit_burst"`
	IsEnabled    bool       `gorm:"default:true" json:"is_enabled"`
	Description  string     `gorm:"type:text" json:"description"`
	CreatedAt    time.Time  `json:"created_at"`
	UpdatedAt    time.Time  `json:"updated_at"`
	DeletedAt    gorm.DeletedAt `gorm:"index" json:"-"`
}

// TableName 指定表名
func (Route) TableName() string {
	return "routes"
}


